<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/vue.js"></script>
</head>
<body>
    <div id="app">
        <p ref="pdom">msg:{{msg}}</p>
        <input type="text" v-model="msg">
        <input type="button" value="销毁实例" onclick="destroyVue()">
        <hr>
        <input type="button" value="打印pdom的innerHTML" @click="printInnerHtml()">
        <hr>
        <p>user：{{user}}</p>
        <input type="button" value="为user添加age" @click="addAge()">
        <hr>
        <input type="button" value="删除age的监控" @click="deleteAge">
    </div>
</body>
<script>
    var vm=new Vue({
        // el:"#app",
        data:{
            msg:"测试数据",
            user:{
                name:"tom"
            }
        },
        methods: {
            printInnerHtml(){
                this.msg="新数据变量";//当Vue发现变量改变后，需要更新DOM的操作为异步操作
                console.log(this.$refs.pdom.innerHTML);
                this.$nextTick(()=>{//底层实现为Promise
                    console.log(this.$refs.pdom.innerHTML);
                });
            },
            addAge(){
                // this.user.age=23;
                //这样添加并没有对其实施监控，get(),set()

                 // $set vue封装后对外公开的 defineProperty 方法
                // $set 主要完成对新增属性进行定义操作
                // this.$set(被操作的对象,需要添加的属性,属性的值)
                if(this.user.age===undefined){
                    this.$set(this.user,"age",23);
                }else{
                    this.user.age=23;
                }
            },
            deleteAge(){
                this.$delete(this.user,"age");
            }
        },
    });

    vm.$mount("#app");//在不指定el配置时，实现手动挂载
    function destroyVue(){
        //销毁的是容器和实例之间的关联关系
        console.log(vm.$el.__vue__);
        vm.$destroy();
        console.log(vm.$el.__vue__);
        
    }
</script>
</html>